// 创建axios实例
const createAxiosInstance = (): AxiosInstance => {
  const instance = axios.create({
    baseURL: 'http://localhost:8080',
    timeout: 30000,
    headers: {
      'Content-Type': 'application/json'
    }
  })

  // 请求拦截器
  instance.interceptors.request.use(
    (config) => {
      // 可以在这里添加token等认证信息
      const token = localStorage.getItem('token')
      if (token) {
        config.headers.Authorization = `Bearer ${token}`
      }
      return config
    },
    (error) => {
      return Promise.reject(error)
    }
  )

  // 响应拦截器
  instance.interceptors.response.use(
    (response: AxiosResponse<ApiResponse>) => {
      const { data } = response
      
      // 如果后端返回的code不是200，视为错误
      if (data.code !== 200 && data.code !== 0) {
        const errorMessage = data.message || '请求失败'
        if (!response.config.skipErrorHandler) {
          ElMessage.error(errorMessage)
        }
        return Promise.reject(new Error(errorMessage))
      }
      
      return data
    },
    (error) => {
      // 统一错误处理
      if (!error.config?.skipErrorHandler) {
        let errorMessage = '网络错误'
        
        if (error.response) {
          const { status, data } = error.response
          switch (status) {
            case 400:
              errorMessage = data?.message || '请求参数错误'
              break
            case 401:
              errorMessage = '未授权，请重新登录'
              // 可以在这里处理登录跳转
              break
            case 403:
              errorMessage = '拒绝访问'
              break
            case 404:
              errorMessage = `请求资源不存在: ${error.config?.url}`
              break
            case 500:
              errorMessage = '服务器内部错误'
              break
            default:
              errorMessage = data?.message || `请求失败 (${status})`
          }
        } else if (error.request) {
          errorMessage = '网络连接失败，请检查网络'
        } else {
          errorMessage = error.message || '未知错误'
        }
        
        ElMessage.error(errorMessage)
      }
      
      return Promise.reject(error)
    }
  )

  return instance
}